const express = require('express');
const moment = require('moment')
const isCheckToken = require('../../middleware/isCheckToken')
const AccountModel = require('../../models/AccountModel')
const router = express.Router();

/* 记账本 list 页面 */
router.get('/account', isCheckToken, function(req, res, next) {
  console.log('req.user：--', req.user);
  AccountModel.find().sort({time: -1}).exec().then((data) => {
    return res.json({
      code: '0000',
      msg: '获取列表成功',
      data
    })
  }).catch(() => {
    return res.json({
      code: '1001',
      msg: '获取列表失败',
      data: null
    })
  })
});

/* 添加成功&失败的表单页面 */
router.post('/account', isCheckToken, function(req, res, next) {
  const { title, account, type, time, remarks } = req.body
  // 表单验证
  if (!title || !account) {
    return res.json({
      code: '1002',
      msg: '事项或金额为必填',
      data: null
    })
  }
  // 金额验证
  if (typeof title !== 'string' || typeof type !== 'number' || typeof account !== 'number' || typeof remarks !== 'string') {
    return res.json({
      code: '1003',
      msg: '类型错误：事项为字符串，类型为数字，金额为数字，备注为字符串',
      data: null
    })
  }
  AccountModel.create({
    ...req.body,
    time: moment(req.body.time).toDate() // 处理时间，将字符串转换为时间格式
  }).then((data) => {
    return res.json({
      code: '0000',
      msg: "添加成功",
      data
    })
  }).catch(() => {
    return res.json({
      code: '1001',
      msg: '添加失败',
      data: null
    })
  })
});

/** 通过 pramas 的方式删除数据 */
router.delete('/account/:id', isCheckToken, (req, res) => {
  const id = req.params.id;
  AccountModel.deleteOne({_id: id}).then(() => {
    return res.json({
      code: '0000',
      msg: '删除成功',
      data: {}
    })
  }).catch(() => {
    return res.json({
      code: '1004',
      msg: '删除失败',
      data: null
    })
  })
})

/** 获取单个账单信息 */
router.get('/account/:id', isCheckToken, (req, res) => {
  const id = req.params.id;

  AccountModel.findById(id).then((data) => {
    return res.json({
      code: '0000',
      msg: '获取成功~',
      data
    })
  })
  .catch(() => {
    return res.json({
      code: '1005',
      msg: '获取失败~~',
      data: null
    })
  })
})

/** 更新单个账单信息接口 */
router.patch('/account/:id', isCheckToken, async (req, res) => {
  const id = req.params.id;

  try {
    // 更新
    await AccountModel.updateOne({_id: id}, req.body)
    // 读取
    const data = await AccountModel.findById(id);
    return res.json({
      code: '0000',
      msg: '读取成功',
      data
    })
  } catch (error) {
    return res.json({
      code: '1006',
      msg: '更新失败',
      data: null,
    })
  }
})



module.exports = router;
